sombetzki
Goto Top

PowerShell Script wenn dann Hilfe

Hallo,

könnte mir jemand bitte beim umschreiben eines vorhandenen Scripts helfen.
Momentan ist folgendes Script bei mir aktiv:

Datei die umgeschrieben wird (Name der Datei: 51258979_SHIPPED) wobei die Zahl sich bei jeder Datei verändert.

Inhalt von 51258979_SHIPPED
tracking_id=00340434312800101703
tracking_url=http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc=00340434312800101703&rfn=&extendedSearch=true
shipping_provider=Paketdienst GLS

Aktuelles Script

$quelle = 'W:\Ausgang\KundeA'  
$ziel = 'W:\Ausgang\KundeA\bearbeitet'  
Get-ChildItem $quelle -File -Filter "*_SHIPPED" | %{  
    $content = Get-Content $_.FullName -raw
    $id = [regex]::Match($content,'(?i)(?<=tracking_id=)003404\d+').Value  
    if ($id -ne ''){  
        $content -replace '(?<=tracking_url=).*',"https://gls-group.eu/DE/de/paketverfolgung?match=$id" -replace '(?<=shipping_provider=).*',"Paketdienst DHL" | set-content $_.FullName  
    }
    $_ | move-item -Destination $ziel -Force
}

Jetzt habe ich jedoch bei einem Kunden eine .xml Datei (Name der Datei: 3675moo_20230316081848_SHIPPED.xml) wobei die Zahl sich bei jeder Datei sich verändert.

Inhalt von 3675moo_20230316081848_SHIPPED.xml
<?xml version='1.0' encoding='utf-8'?>  
<OrderStatus>
<OrderData>
<Version>1.0.0</Version>
<OrderDate>20230316081848</OrderDate>
<OrderID>3675moo</OrderID>
<OrderLanguage>DE</OrderLanguage>
<ProductIDs>
<ProductID>302020030</ProductID>
<ProductID>POSTERPAUSCHALE</ProductID>
</ProductIDs>
</OrderData>
<StatusInformation>
<Status>SHIPPED</Status>
<TrackingNumber>00340434312800100713</TrackingNumber>
<PackageWeight>1000</PackageWeight>
<LogisticsCompanyID>GLS</LogisticsCompanyID>
</StatusInformation>
</OrderStatus>

und bekomme das Script nicht angepasst dass in der xml bei trackingNumber 0034043* das Feld LogisticsCompanyID ind DHL geändert wird.

VG
Sombetzki

Content-Key: 6669525415

Url: https://administrator.de/contentid/6669525415

Printed on: May 20, 2024 at 19:05 o'clock

Mitglied: 6247018886
Solution 6247018886 Apr 06, 2023 updated at 14:32:47 (UTC)
Goto Top
$quelle = 'W:\Ausgang\KundeA'  
$ziel = 'W:\Ausgang\KundeA\bearbeitet'  
Get-ChildItem $quelle -File -Filter "*_SHIPPED" | %{  
 if ($_.Extension -eq '.xml'){  
    [xml]$xml = Get-Content $_.FullName
    if ($xml.Orderstatus.StatusInformation.TrackingNumber -like '003404*'){  
        $xml.Orderstatus.StatusInformation.LogisticsCompanyID = 'DHL'  
        $xml.Save($_.Fullname)
    }
 }else{
    $content = Get-Content $_.FullName -raw
    $id = [regex]::Match($content,'(?i)(?<=tracking_id=)003404\d+').Value  
    if ($id -ne ''){  
        $content -replace '(?<=tracking_url=).*',"https://gls-group.eu/DE/de/paketverfolgung?match=$id" -replace '(?<=shipping_provider=).*',"Paketdienst DHL" | set-content $_.FullName  
    }
 }
 $_ | move-item -Destination $ziel -Force
}
Cheers briggs
Member: Sombetzki
Sombetzki Apr 06, 2023 at 14:40:03 (UTC)
Goto Top
Vielen Dank, werde ich gleich mal ausprobieren.
Sag mal kann mann auch auf zwei unterschiedliche Nummern abfragen?
DHL Ausland beginnt die Nummer immer mit 5039,
also wenn 003404 oder 5039 =DHL
Member: Crusher79
Crusher79 Apr 06, 2023 updated at 14:40:29 (UTC)
Goto Top
$shipping_file = "C:\temp\Neues Textdokument.txt"  
$xml = [xml](Get-Content $shipping_file)
$xml.OrderStatus.StatusInformation.TrackingNumber |
    Where-Object {$_ -like '0034*'}  
$xml.OrderStatus.StatusInformation.LogisticsCompanyID='DHL'  
$xml.Save($shipping_file)

Verdammt., @6247018886 war schneller
Mitglied: 3063370895
Solution 3063370895 Apr 06, 2023 at 14:42:21 (UTC)
Goto Top
Zitat von @Sombetzki:

Vielen Dank, werde ich gleich mal ausprobieren.
Sag mal kann mann auch auf zwei unterschiedliche Nummern abfragen?
DHL Ausland beginnt die Nummer immer mit 5039,
also wenn 003404 oder 5039 =DHL

$quelle = 'W:\Ausgang\KundeA'  
$ziel = 'W:\Ausgang\KundeA\bearbeitet'  
Get-ChildItem $quelle -File -Filter "*_SHIPPED" | %{  
 if ($_.Extension -eq '.xml'){  
    [xml]$xml = Get-Content $_.FullName
    if ($xml.Orderstatus.StatusInformation.TrackingNumber -like '0034043*' -or $xml.Orderstatus.StatusInformation.TrackingNumber -like '5039*')  
        $xml.Orderstatus.StatusInformation.LogisticsCompanyID = 'DHL'  
        $xml.Save($_.Fullname)
    }
 }else{
    $content = Get-Content $_.FullName -raw
    $id = [regex]::Match($content,'(?i)(?<=tracking_id=)003404\d+|5039\d+').Value  
    if ($id -ne ''){  
        $content -replace '(?<=tracking_url=).*',"https://gls-group.eu/DE/de/paketverfolgung?match=$id" -replace '(?<=shipping_provider=).*',"Paketdienst DHL" | set-content $_.FullName  
    }
 }
 $_ | move-item -Destination $ziel -Force
}
Member: Crusher79
Crusher79 Apr 06, 2023 at 14:42:50 (UTC)
Goto Top
Zitat von @Sombetzki:

Vielen Dank, werde ich gleich mal ausprobieren.
Sag mal kann mann auch auf zwei unterschiedliche Nummern abfragen?
DHL Ausland beginnt die Nummer immer mit 5039,
also wenn 003404 oder 5039 =DHL

Ja mit ODER.

$xml.Orderstatus.StatusInformation.TrackingNumber -like '0034043*' -or $xml.Orderstatus.StatusInformation.TrackingNumber -like '5039*'  
Member: michi1983
michi1983 Apr 06, 2023 at 14:42:57 (UTC)
Goto Top
Zitat von @Sombetzki:

Vielen Dank, werde ich gleich mal ausprobieren.
Sag mal kann mann auch auf zwei unterschiedliche Nummern abfragen?
DHL Ausland beginnt die Nummer immer mit 5039,
also wenn 003404 oder 5039 =DHL

das 2. If statement bekommst du nicht selber hin? Was soll denn passieren wenn die andere Nummer (Ausland) vorkommt?
Mitglied: 6247018886
Solution 6247018886 Apr 06, 2023 updated at 14:54:16 (UTC)
Goto Top
Zitat von @Sombetzki:

Vielen Dank, werde ich gleich mal ausprobieren.
Sag mal kann mann auch auf zwei unterschiedliche Nummern abfragen?
Natürlich.
DHL Ausland beginnt die Nummer immer mit 5039,
also wenn 003404 oder 5039 =DHL

$quelle = 'W:\Ausgang\KundeA'  
$ziel = 'W:\Ausgang\KundeA\bearbeitet'  
Get-ChildItem $quelle -File -Filter "*_SHIPPED" | %{  
 if ($_.Extension -eq '.xml'){  
    [xml]$xml = Get-Content $_.FullName
    if ($xml.Orderstatus.StatusInformation.TrackingNumber -match '^(003404|5039)'){  
        $xml.Orderstatus.StatusInformation.LogisticsCompanyID = 'DHL'  
        $xml.Save($_.Fullname)
    }
 }else{
    $content = Get-Content $_.FullName -raw
    $id = [regex]::Match($content,'(?i)(?<=tracking_id=)003404\d+').Value  
    if ($id -ne ''){  
        $content -replace '(?<=tracking_url=).*',"https://gls-group.eu/DE/de/paketverfolgung?match=$id" -replace '(?<=shipping_provider=).*',"Paketdienst DHL" | set-content $_.FullName  
    }
 }
 $_ | move-item -Destination $ziel -Force
}
Member: Sombetzki
Sombetzki Apr 11, 2023 at 09:34:11 (UTC)
Goto Top
vielen Dank für die schnelle Hilfe, leider ist etwas durcheinander geraten.

<?xml version='1.0' encoding='utf-8'?>  
<OrderStatus>
<OrderData>
<Version>1.0.0</Version>
<OrderDate>20230316081848</OrderDate>
<OrderID>3675moo</OrderID>
<OrderLanguage>DE</OrderLanguage>
<ProductIDs>
<ProductID>302020030</ProductID>
<ProductID>POSTERPAUSCHALE</ProductID>
</ProductIDs>
</OrderData>
<StatusInformation>
<Status>SHIPPED</Status>
<TrackingNumber>00340434312800100713</TrackingNumber>
<PackageWeight>1000</PackageWeight>
<LogisticsCompanyID>GLS</LogisticsCompanyID>
</StatusInformation>
</OrderStatus>

bei dieser Datei soll in TrackingNumber nach 003404 oder 5039 gesucht werden und falls vorhanden im Feld
LogisticsCompanyID DHL eingetragen werden anschließend sollen alle überprüften *_SHIPPED.xml Dateien nach $ziel verschoben werden.
$quelle = 'W:\Ausgang\KundeA'
$ziel = 'W:\Ausgang\KundeA\bearbeitet'
Mitglied: 6247018886
6247018886 Apr 11, 2023 updated at 09:48:01 (UTC)
Goto Top
Steht doch oben schon genau so in X Varianten ... 🧐.

p.s. "Dat Dingens da op de Hals hat übrijens ne Funktion minge Schöler."
Member: Sombetzki
Sombetzki Apr 11, 2023 at 09:48:59 (UTC)
Goto Top
Ja aber in den Lösungen steht immer was von tracking_url, die ja nicht in der Datei vorhanden ist.
Mitglied: 6247018886
6247018886 Apr 11, 2023 updated at 10:01:03 (UTC)
Goto Top
Zitat von @Sombetzki:

Ja aber in den Lösungen steht immer was von tracking_url, die ja nicht in der Datei vorhanden ist.
Das war nur für den Fall das beide Varianten von Dateien im Verzeichnis liegen, das hattest du nämlich nicht spezifiziert! In der IF Abfrage wird ja unterschieden, ist es eine XML oder nicht und je nachdem wird die entsprechende Bearbeitungs-Variante angewendet!

Wenn das eh alles die selben XMLs sind dann kannst du die IF-Abfrage natürlich entfernen!! Code lesen und verstehen und nicht nur Blind kopieren ist die erste Devise!

$quelle = 'W:\Ausgang\KundeA'  
$ziel = 'W:\Ausgang\KundeA\bearbeitet'  
Get-ChildItem $quelle -File -Filter "*_SHIPPED.xml" | %{  
    [xml]$xml = Get-Content $_.FullName
    if ($xml.Orderstatus.StatusInformation.TrackingNumber -match '^(003404|5039)'){  
        $xml.Orderstatus.StatusInformation.LogisticsCompanyID = 'DHL'  
        $xml.Save($_.Fullname)
    }
    $_ | move-item -Destination $ziel -Force
}
Member: Sombetzki
Sombetzki Apr 11, 2023 at 10:17:45 (UTC)
Goto Top
sorry klappt leider nicht
C:\scripte>PowerShell.exe -ExecutionPolicy Bypass -Command "& 'W:\OrderDown\Status\dhl.ps1'"  
In W:\OrderDown\Status\dhl.ps1:5 Zeichen:82
+ ... Orderstatus.StatusInformation.TrackingNumber -match '^(003404|5039)')  
+                                                                         ~
Anweisungsblock nach "if" (Bedingung) fehlt.  
In W:\OrderDown\Status\dhl.ps1:10 Zeichen:1
+ }
+ ~
Unerwartetes Token "}" in Ausdruck oder Anweisung.  
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : MissingStatementBlock
Mitglied: 6247018886
6247018886 Apr 11, 2023 updated at 10:29:16 (UTC)
Goto Top
Eine geschweifte Klammer zu viel entfernt ist korrigiert. Fehlermeldungen lesen hilft ...
Member: Sombetzki
Sombetzki Apr 11, 2023 at 10:37:53 (UTC)
Goto Top
@6247018886
super vielen Dank.